Type classes: exploring the design space